package cn.tianyigps.m7.utils;

import java.math.BigInteger;
import java.text.DecimalFormat;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneId;
import java.util.Date;

/**
 * @Author: LiuHao
 * @Descirption:
 * @Date: 2019/4/15_10:25
 */
public class DataFormatUtil {

    /**
     * 十六进制转换为Date类型
     * @param date
     * @return
     */
    public static Date formatDate(String date){
        int year = hexadecimalTODecimal(date.substring(0,2)).intValue();
        int month = hexadecimalTODecimal(date.substring(2,4)).intValue();
        int day = hexadecimalTODecimal(date.substring(4,6)).intValue();
        int hour = hexadecimalTODecimal(date.substring(6,8)).intValue();
        int minute = hexadecimalTODecimal(date.substring(8,10)).intValue();
        int second = hexadecimalTODecimal(date.substring(10,12)).intValue();
        LocalDateTime localDateTime = LocalDateTime.of(2000 + year, Month.of(month),day,hour + 8 ,minute,second);
        return Date.from(localDateTime.atZone(ZoneId.of("Asia/Shanghai")).toInstant());
    }


    /**
     * 十六进制字符串转换经纬度
     */
    public static Double getLatOrLon(String hexadecimal){
        BigInteger decimal = hexadecimalTODecimal(hexadecimal);
        return Double.valueOf(txDouble(decimal.doubleValue(),60*30000));
    }

    /**
     *  除法运算，保留小数
     * @param a 被除数
     * @param b 除数
     * @return 商
     */
    public static String txDouble(double a,long b) {
        DecimalFormat df = new DecimalFormat("0.000000000000");//设置保留6位数
        return df.format( a / b);
    }

    /**
     * 十六进制转换十进制
     * @param hexadecimal
     * @return
     */
    public static BigInteger hexadecimalTODecimal(String hexadecimal){
        return new BigInteger(hexadecimal, 16);
    }

    /**
     * 十六进制转换十进制
     * @param hexadecimal
     * @return
     */
    public static Double hexadecimalTODecimalDouble(String hexadecimal){
        return new BigInteger(hexadecimal, 16).doubleValue();
    }

    /**
     * 十六进制转换十进制字符串
     * @param hexadecimal
     * @return
     */
    public static String hexadecimalTODecimalString(String hexadecimal){
        return new BigInteger(hexadecimal, 16).toString();
    }


    /**
     * 十六进制转换二进制
     * @param hexadecimal
     * @return
     */
    public static String hexadecimalTOBinary(String hexadecimal){
        StringBuilder buffer = new StringBuilder();
        char[] chars = hexadecimal.toCharArray();
        for (char c : chars) {
            String binStr = Integer.toBinaryString(Integer.parseInt(String.valueOf(c), 16));
            //长度小于4时对数据进行补0
            if (binStr.length() < 4) {
                while (binStr.length() < 4) {
                    binStr = "0" + binStr;// 左补0
                }
            }
            buffer.append(binStr);
        }
        return buffer.toString();
    }

    /**
     * 二进制转换十进制
     * @param binary
     * @return
     */
    public static String binaryTODecimal(String binary){
        return new BigInteger(binary, 2).toString(10);
    }

}
